package main

import (
	"fmt"
	"sync"
	"time"
)

// 创建一把互斥锁
var lock sync.Mutex

func printer(str string) {
	// 让先来的人拿到锁, 把当前函数锁住, 其它人都无法执行
	// 上厕所关门
	lock.Lock()
	for _, v := range str {
		fmt.Printf("%c", v)
		time.Sleep(time.Millisecond * 500)
	}
	// 先来的人执行完毕之后, 把锁释放掉, 让其它人可以继续使用当前函数
	// 上厕所开门
	lock.Unlock()
}
func person1() {
	printer("hello")
}
func person2() {
	printer(" world")
}
func main() {
	go person1()
	go person2()
	for {

	}
}
